<?php
class Categoria extends Doctrine_Record {
    public function setTableDefinition() {
        $this->setTableName('categoria');
        $this->hasColumn('nombre','string',200);
        $this->hasColumn('icon','string',200);
        $this->hasColumn('texto','string',2500);
        $this->hasColumn('orden','integer',2);
        $this->hasColumn('modificado','integer'); //sirve para trabajar con la cabecera HTTP_IF_MODIFIED_SINCE
        $this->hasColumn('id_estado','integer');
        $this->hasColumn('id_marker','integer'); //categorias en los markers relacion n a n
        $this->hasColumn('id_cooperativa','integer'); //categorias en los markers relacion n a n
    }
	
    public function setUp(){
        $this->hasOne('Estado as estado',array(
            'local'=>'id_estado',
            'foreign'=>'id'
        ));
        $this->hasMany('Marker as markers', array(
            'local' => 'id_marker',
            'foreign' => 'id_categoria',
            'refClass' => 'MarkerCategoria'
        ));
        $this->hasMany('Cooperativa as cooperativas', array(
            'local' => 'id_cooperativa',
            'foreign' => 'id_categoria',
            'refClass' => 'CooperativaCategoria'
        ));
    }
	
    //INCIO DE GETERS Y SETERS
    public function getNombre () {
        return utf8_decode($this->_get('nombre'));
    }
    public function setNombre ($nombre) {
        $this->_set('nombre', utf8_encode($nombre));
    }
    
     public function getTexto () {
        return utf8_decode($this->_get('texto'));
    }
    public function setTexto ($texto) {
        $this->_set('texto', utf8_encode($texto));
    }
    
    public function getIdentificador () {
        $img = $this->_get('icon');
        $imgArray = explode('.', $img);
        return $imgArray[0];
    }
    
    /*public function getUltimaModificacion () {
        return date('D, d M Y H:i:s', $this->_get('modificado'));
    }*/
    //FIN SETERS Y GETERS
    
    public static function ultimaModificacion () {
        $q = Doctrine_Query::create()
            ->select('c.*')
            ->from('categoria c')
            ->orderBy('c.modificado desc');
        $result = $q->execute();
        return date('D, d M Y H:i:s', $result[0]->modificado);
    }
    
    public static function listar ($estado=false) {
        $estado = ($estado)?$estado:'%';
        $q = Doctrine_Query::create()
            ->select('c.*')
            ->from('categoria c')
            ->innerJoin('c.estado as e')
            ->where('e.contenido like ?', $estado)
            ->andWhere('e.contenido <> "borrado"')
            ->orderBy('c.orden, c.nombre');
        return $q->execute();
    }
    
    public static function toCheck ($objeto=false) {
        $html = '';
        $categorias = self::listar(Estado::visible()->contenido);
        foreach ($categorias as $categoria) {
            //$html .= $objeto->inCategorias($categoria).'<br />';            
            $checked = ($objeto && $objeto->inCategorias($categoria))?' checked="checked"':'';
            $html .= '<div class="checkCategoria">';
            $html .= '<label for="categoria'.$categoria->id.'">'.$categoria->nombre.' </label>';
            $html .= '<input type="checkbox"'.$checked.' value="'.$categoria->id.'" name="categorias[]" id="categoria'.$categoria->id.'">';
            $html .= '</div>';
        }
        return $html;
    }
    public static function toSelect () {
        $html = '<select id="selectCategorias" name="categoria">';
        $categorias = Doctrine::getTable('categoria')->findAll();
        foreach ($categorias as $categoria) {
            $html .= '<option value="'.$categoria->id.'">'.$categoria->nombre.'</option>';
        }
        $html .= '</select>';
        return $html;
    }
    
    
    public static function toIds ($cats=false) {
        $ids = array();
        $categorias = ($cats)?$cats:Doctrine::getTable('categoria')->findAll();
        foreach ($categorias as $categoria) {
            $ids[] = $categoria->id;
        }
        return $ids;
    }
}

/*
 * COMO FUNCIONA
 * Tiene una relacion de n a n con los markers.
 * Ej de categoria: vidrio, platico, tapitas
 * orden -> orden en que se tienen que listar las categorias
 * modificado -> dato que registra la ultima fecha en que se cargo un marker asociaodo a la categoria. Esto sirve luego las respuestas 304
 * modificado tiene que guardar el resultado de la funcion nativa time() en el momento en que se hace el cambio
 */
?>